/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import clases.Articulo;
import clases.DetalleMovimiento;
import clases.Movimiento;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author Edder
 */
public class MdlDetalleMovimiento implements Modelo<DetalleMovimiento>{

    /**
     * Inserta un detalle de movimiento
     * @param objeto DetalleMovimiento sin ID
     * @param cnx Conexión previamente abierta
     * @throws SQLException
     */
    @Override
    public void insert(DetalleMovimiento objeto, Conexion cnx) throws SQLException {
        String sql = "INSERT INTO detallemovimiento(idMovimiento, idArticulo, cantidad) VALUES("
                + objeto.getMovimiento().getIdMovimiento() + ", "
                + objeto.getArticulo().getIdArticulo() + ", "
                + objeto.getCantidad() + ");";
        cnx.ejecutar(sql);
    }

    /**
     * Devuelve el último ID insertado
     * @param cnx Conexión previamente abierta
     * @return
     * @throws SQLException
     */
    @Override
    public int getLastId(Conexion cnx) throws SQLException {
        String sql = "SELECT MAX(idDetalleMovimiento) FROM detallemovimiento";
        ResultSet rs = cnx.consultar(sql);
        if(rs.next())
            return rs.getInt(1);
        return -1;
    }

    /**
     * Sin implementar
     * @param objeto
     * @param cnx
     * @throws SQLException
     */
    @Override
    public void update(DetalleMovimiento objeto, Conexion cnx) throws SQLException {        
    }

    public ArrayList<DetalleMovimiento> getDetalleMovimientos_movimiento(int idMovimiento, Conexion cnx) throws SQLException{
        String sql = "SELECT * FROM detalleMovimiento WHERE "
                + "idMovimiento = " + idMovimiento;
        return get(sql, cnx);
    }
    
    /**
     * 
     * @param sql
     * @param cnx
     * @return null
     * @throws SQLException
     */
    @Override
    public ArrayList<DetalleMovimiento> get(String sql, Conexion cnx) throws SQLException {
        ArrayList<DetalleMovimiento> detalleMovimientos = new ArrayList<>();
        ResultSet rs = cnx.consultar(sql);
        while(rs.next()){
            detalleMovimientos.add(new DetalleMovimiento(
                    rs.getInt("idDetalleMovimiento"),
                    new Movimiento(){
                        {
                            this.setIdMovimiento(rs.getInt("idMovimiento"));
                        }
                    },
                    new Articulo(){
                        {
                            this.setIdArticulo(rs.getInt("idArticulo"));
                        }
                    },
                    rs.getInt("cantidad"))
            );
        }
        return detalleMovimientos;
    }

    /**
     * Devuelve DetalleMovimiento según ID
     * @param id
     * @param cnx
     * @return
     * @throws SQLException
     */
    @Override
    public DetalleMovimiento get(int id, Conexion cnx) throws SQLException {
        String sql = "SELECT * FROM detallemovimiento WHERE idDetalleMovimiento = " + id;
        ResultSet rs = cnx.consultar(sql);
        if(rs.next())
            return new DetalleMovimiento(
                    rs.getInt("idDetalleMovimiento"), 
                    new Movimiento(){{this.setIdMovimiento(rs.getInt("idMovimiento"));}}, 
                    new Articulo(){{this.setIdArticulo(rs.getInt("idArticulo"));}}, 
                    rs.getInt("cantidad"));
        return null;
    }
    
}
